﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace CPS1
{
    // główne okno
    public partial class MainWindow : Form
    {
        // lista załadowanych / stworzonych sygnałów
        public List<Signal> loaded_signals;
        // konstruktor
        public MainWindow()
        {
            InitializeComponent();

            this.loaded_signals = new List<Signal>();
        }
        // Zamykanie aplikacji
        private void zakończToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        // otwieranie kreatora sygnałów
        private void btn_create_Click(object sender, EventArgs e)
        {
            CreatorWindow win = new CreatorWindow(this);
            win.Show();
        }
        // pokazywanie sygnałów
        private void btn_show_Click(object sender, EventArgs e)
        {
            if (lb_signals_list.SelectedIndex >= 0)
            {
                SignalWindow sgn_win = new SignalWindow(this, this.loaded_signals[lb_signals_list.SelectedIndex]);
                sgn_win.Show();
            }
            else
            {
                MessageBox.Show("Proszę wybrać sygnał do pokazania");
            }
        }
        // usuwanie sygnałów
        private void btn_remove_Click(object sender, EventArgs e)
        {
            if (lb_signals_list.SelectedIndex >= 0)
            {
                this.loaded_signals.RemoveAt(lb_signals_list.SelectedIndex);
                lb_signals_list.Items.RemoveAt(lb_signals_list.SelectedIndex);
            }
            else
            {
                MessageBox.Show("Proszę wybrać sygnał do usunięcia");
            }
        }
        // wczytywanie sygnałów
        private void btn_load_Click(object sender, EventArgs e)
        {
            openFileDialog1.Title = "Wczytywanie sygnału";
            openFileDialog1.Filter = "Pliki sygnałów|*.sign";

            if(openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                String filePath = openFileDialog1.FileName.ToString();

                BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open));
                reader.ReadString();// rodzaj danych - na razie zbędne, ale dla zachowania ciągłości w odczycie pliku potrzebne
                Double A = reader.ReadDouble();// amplituda
                Double f = reader.ReadDouble();// częstotliwość próbkowania
                Double t1 = reader.ReadDouble();// czas początkowy
                int amount = (int) reader.ReadDouble();// ilość próbek

                Double[,] calculatedValues = new Double[amount, 2];
                
                int i = 0;
                while (i < amount)
                {
                    calculatedValues[i,0] = Math.Round(i * (1/f), 6); // wygenerowanie czasu
                    calculatedValues[i,1] = reader.ReadDouble(); // odczyt wartości
                    i++;
                }
                // koniec odczytu
                reader.Close();
                // wygenerowanie obiektu sygnału
                DiscreetSignal signal = new DiscreetSignal(filePath, A, t1, f, calculatedValues);
                // dodanie go do list sygnałów
                this.lb_signals_list.Items.Add(filePath + " ( " + f + "Hz )");
                this.loaded_signals.Add(signal.copy());
            }
        }
    }
}
